{
	// function fn<T>(value: T): T {
	//     console.log(value.length)
	//     return value
	// }

	// const str = fn("a")

	// const num = fn([1,2,3])

	// 1. 指定更加具体的类型
	// function fn<T>(value: T[]): T[] {
	//     console.log(value.length)
	//     return value
	// }

	// const str = fn(['a', "b"])

	// const num = fn([1,2,3])
	// const arr = fn([{a:1}])

	interface ILength {
		length: number
		push: () => void
	}
	function fn<T extends ILength>(value: T): T {
		console.log(value.length)
		return value
	}

	// const str = fn<string>("a")
	// const n = fn<number>(100)
	// const obj = fn<object>({a:1,b:2})

	// const num = fn([1,2,3])
}
